/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Reportes;

import Model.Connect;
import java.io.FileOutputStream;
import java.sql.SQLException;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JOptionPane;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

/**
 *
 * @author Molina
 */
public class ReporteSedesExcel {
static Connect conexion = new Connect();

    /**
    019      * Para escribir el contenido de una celda.
    020      *
    021      * @param row Row.
    022      * @param i posicion en la fila.
    023      * @param value texto a escribir.
    024      * @param style estilo de la celda.
    025      */
    public static void createCell(Row row, int i, String value, CellStyle style) {
        Cell cell = row.createCell(i);
        value = value + " ";
        cell.setCellValue(value);
        // si no hay estilo, no se aplica
        if (style != null) {
            cell.setCellStyle(style);
        }
    }

    /**
    037      * Crea una hoja Excel con el contenido especificado.
    038      * @param v Vector con los datos a escribir en la hoja.
    039      * @param namesheet nombre de la hoja.
    040      * @param filename path del fichero donde se escribe.
    041      */
    public static void crearExcel(Vector v, String namesheet, String filename)
            throws Exception {
        try {
            Workbook wb = new HSSFWorkbook();
            // Workbook wb = new XSSFWorkbook();
            CreationHelper createHelper = wb.getCreationHelper();
            Sheet sheet = wb.createSheet(namesheet);
            int filas = v.size();
            for (int i = 0; i < filas; i++) {
                String fila = (String) v.elementAt(i);
                StringTokenizer st = new StringTokenizer(fila, ",");
                Row row = sheet.createRow((short) i);
                int j = 0;
                while (st.hasMoreTokens()) {
                    String token = st.nextToken();
                    // para la cabecera, la primera fila, aplicamos un estilo (negrita y color de fondo azul)
                    if (i == 0) {
                        CellStyle style = wb.createCellStyle();
                        style.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
                        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
                        Font font = wb.createFont();
                        // font.setFontHeightInPoints((short)10);
                        font.setFontName("Courier New");
                        // font.setItalic(true);
                        // font.setStrikeout(true);
                        font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                        font.setColor(IndexedColors.WHITE.getIndex());
                        style.setFont(font);

                        createCell(row, j, token, style);
                    } else {
                        createCell(row, j, token, null);
                    }
                    j = j + 1;
                }
            }
            // Asignar automaticamente el tamaño de las celdas en funcion del contenido
            for (int i = 0; i < filas; i++) {
                sheet.autoSizeColumn((short) i);
            }
            // Escribir el fichero.
            FileOutputStream fileOut = new FileOutputStream(filename);
            wb.write(fileOut);
            fileOut.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**

    098      * Para probar el correcto funcionamiento de la clase.
    099      * @param args argumentos de entrada.
    100      */
    public void generarSedes() {
        try {
            //Datos a escribir
            int cont = 0;
            Vector v = new Vector();
            v.addElement("NIT,NOMBRRE,TELEFONO");
            conexion.conectar();
            conexion.setQuery("SELECT sed_numero, sed_nombre, sed_telefono FROM Sedes order by sed_numero asc");
            System.out.print("SELECT sed_numero, sed_nombre, sed_telefono FROM Sedes order by sed_numero asc");
            conexion.Consultar();
            while (conexion.getResultado().next()) {
                v.addElement("" + conexion.getResultado().getString("sed_numero") + ","
                        + conexion.getResultado().getString("sed_nombre") + ","
                        + conexion.getResultado().getString("sed_telefono") );
                cont++;
            }
            // Generar el fichero
            if (cont > 0) {
                ReporteEmpresasExcel.crearExcel(v, "SEDES", "D:\\Juan Carlos Molina Lozano\\Proyecto Gafitas/"
                        + "REPORTE_DE_SEDES.xls");
                System.out.println("[ Generado fichero. ]");
                JOptionPane.showMessageDialog(null, "REPORTE DE SEDES GENERADO \n"
                        + "CONSULTE EN EL ESCRITORIO SU ARCHIVO");

            } else {
                JOptionPane.showMessageDialog(null, "NO HAY SEDES ");
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conexion.cerrarResultado();
            conexion.cerrarStatement();
            conexion.cerrarConexion();
        }
    }

    public static void main(String[] args) {
        ReporteSedesExcel obj = new ReporteSedesExcel();
        obj.generarSedes();
    }
}
